package com.qidian.mes.sys.excel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.qidian.mes.pojo.Dict;
import com.qidian.mes.sys.service.DictService;
import com.qidian.mes.util.pojo.MESResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author 戴着假发的程序员
 * @Company 起点编程
 * @Time 2023/11/1 10:29
 * @Description
 */
@Component
@Scope("prototype")// 因为我们要确保线程安全
public class ExcelReadListener extends AnalysisEventListener<Dict> {


    @Autowired
    private DictService dictService;
    // 导入的结果
    private MESResult result;

    public MESResult getResult() {
        return result;
    }

    public void setResult(MESResult result) {
        this.result = result;
    }

    private List<Dict> dicts = new ArrayList<>();

    // 每读取一行数据，就会出发这个方法，并且将读取的数据传入到方法中。
    @Override
    public void invoke(Dict dict, AnalysisContext context) {
        dicts.add(dict);
        if(dicts.size() >= 5){
            saveDicts();
        }
    }
    // 所有的读取操作结束之后执行一次。
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        if(dicts.size() > 0){
            saveDicts();
        }
    }

    private void saveDicts(){
        // 批量保存
        result = dictService.saves(dicts);
        // 保存完成之后清理集合
        if(result.getData().equals(new Integer(dicts.size()))){
            dicts.clear();
        }
    }
}
